home *** CD-ROM | disk | FTP | other *** search
- /*
- ** $VER: makexref.rexx 1.2 (10.5.96) Rolf Rotvel
- **
- ** Uses rexxtricks.library
- */
-
- parse arg file
-
- template = 'FILE/A/F '
- options prompt template
-
- PARSEARG:
- select
- when file = '' then do
- say 'Required argument missing'
- exit
- end
- when file = '?' then do
- pull file
- signal parsearg
- end
- otherwise do
- if ~readfile(file, line) then do
- say 'Error reading '||file
- exit 10
- end
- end
-
- call addlib('rexxsupport.library', 0, -30, 0)
- call addlib('rexxtricks.library', 0, -30, 0)
-
- if upper(word(line.1, 1)) ~= '@DATABASE' then do
- say file||' is not an AmigaGuide file'
- exit 10
- end
-
- filename = '"'||filepart(file)||'"'
- xref = makesuffix(file, 'xref', 'r')
-
- num = 1
- len = 0
- sta = 1
- do forever
- chk = lsearch('@node*', line, sta,, 'p')
- if chk = -1 then leave /* No more nodes */
- sta = chk + 1
-
- node = word(line.chk, 2)
- if pos('"', node) > 0 then parse upper var line.chk '"' node '"'
- if node = 'MAIN' then iterate
- say node
-
- if right(node, 2) = '()' then what.num = ' 0 1' /* It's a function */
- else what.num = ' 0 0'
-
- if words(node) > 1 then node.num = '"'||node||'"'
- else node.num = node
-
- len = max(len, length(node.num))
- num = num + 1
- end
- node.0 = num - 1
-
- write.1 = 'XREF:'
- num = 2
- len = len + 2
-
- do n = 1 to node.0
- write.num = left(node.n, len)||filename||what.n
- num = num + 1
- end
- write.num = '#'
- write.0 = num
-
- call writefile(xref, write)
-
- exit
-